package com.biz.primus.ms.order.dao.po;

import com.biz.primus.model.order.enums.*;
import com.biz.primus.ms.base.jpa.po.BaseEntity;
import com.biz.primus.ms.order.dao.po.embeddable.OrderConsigneeInfo;
import com.biz.primus.ms.order.dao.po.embeddable.OrderInvoice;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;

/**
 * 订单汇总视图
 *
 * @author Tiger Feng
 * @date 2017年10月28日
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Entity
@Table(name = "ord_order_summary")
public class OrderSummary extends BaseEntity implements Serializable {
    private static final long serialVersionUID = 2041855532414777358L;

    /**
     * 订单汇总编号
     */
    @Column(length = 64, unique = true)
    private String orderSummaryCode;
    /**
     * 订单类型(闪送、商城、秒杀、同步)
     */
    @Enumerated(EnumType.STRING)
    @Column(length = 32, nullable = false)
    private OrderType orderType;

    //--1、门店信息----------------------
    /**
     * 门店编码(门店或省仓店)
     */
    @Column(length = 32, nullable = false)
    private String depotCode;

    //--2、收货地址信息-------------------
    /**
     * 用户ID
     */
    @Column(nullable = false)
    private Long userId;
    /**
     * 订单IP，用户下单的IP地址
     */
    @Column(length = 15)
    private String orderIp;
    /**
     * 收货信息-嵌入
     */
    @Embedded
    private OrderConsigneeInfo consignee;

    //--3、门店订单 商品列表（商品编号、商品数量）-------------------
    /**
     * 门店订单
     */
    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(nullable = false, name = "store_order_id", unique = true)
    private Order storeOrder;

    //--4、总店订单 商品列表（商品编号、商品数量）-------------------
    /**
     * 总店订单、旗舰店订单
     */
    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(nullable = false, name = "flagship_order_id", unique = true)
    private Order flagshipOrder;

    //--5、商品促销、订单促销、优惠券-------------------


    //--7、支付方式-------------------
    /**
     * 支付方式
     */
    @Enumerated(EnumType.STRING)
    @Column(length = 32, nullable = false)
    private OrderPaymentWay paymentWay;
    /**
     * 未支付订单过期时间
     */
    private Timestamp expireAt;
    /**
     * 支付状态
     */
    @Enumerated(EnumType.STRING)
    @Column(length = 32, nullable = false)
    private PaymentState paymentState;
    /**
     * 未支付订单保留时间(分)
     */
    private Integer expireMinutes = 5;
    /**
     * 未支付失效时间
     */
    private Timestamp expireTime;

    /**
     * 实际支付金额,支付完成后更新此字段
     */
    private Integer paidAmount;
    /**
     * 支付时间,支付成功后更新此字段
     */
    private Timestamp paymentTimestamp;
    /**
     * 支付流水号
     */
    @Column(length = 128)
    private String paidSerialNumber;

    //--8、用户备注、发票信息-------------------
    /**
     * 用户备注
     */
    @Column(length = 250)
    private String userRemark;
    /**
     * 商户自备注(一般用于客服)
     */
    @Column(length = 250)
    private String selfRemark;
    /**
     * 发票信息
     */
    @Embedded
    private OrderInvoice invoice;

    //--9、金额费用、商品数量统计-------------------
    /**
     * 应付款总金额
     */
    private Integer payableAmount = 0;
    /**
     * 商品总数量
     */
    private Integer quantity = 0;
    /**
     * 物流费-总共
     */
    private Integer deliveryMoney;

}
